﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Iacym.Entities;
using Iacym.BusinessLogic;
using Microsoft.Practices.Unity;

namespace Iacym.UI
{
    public partial class FrmMttoDatosTransferencia : Form
    {
        [Dependency]
        public IPersonaBL personaBL { get; set; }

        [Dependency]
        public ICargoIglesiaBL cargoIglesiaBL { get; set; }

        [Dependency]
        public IDatosTransferenciaBL datTransf { get; set; }

        public FrmMttoDatosTransferencia()
        {
            InitializeComponent();
            this.BuildUp();
        }

        bool isNew;

        //permisos de menus por asignar
        List<CARGO_IGLESIA> _listCargoIglesiaPorAsignar;

        public void Nuevo()
        {
            isNew = true;
            pERSONABindingSource.AddNew();
        }

        public PERSONA _persona { get; set; }

        public USUARIO currentUsuarioMttoDatosTransferencia { get; set; }

        public void Editar()
        {
            isNew = false;
            pERSONABindingSource.DataSource = _persona;
            dATOS_TRANSFERENCIABindingSource1.DataSource = datTransf.GetAllDatosTransferenciaByCriterio(_persona.Id);
        }

        private void FrmMttoDatosTransferencia_Load(object sender, EventArgs e)
        {
            cARGO_IGLESIABindingSource.DataSource = cargoIglesiaBL.GetAllFromCargoIglesia();

            _listCargoIglesiaPorAsignar = new List<CARGO_IGLESIA>();
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            var persona = pERSONABindingSource.Current as PERSONA;
            if (persona != null)
            {
                if (isNew == true)
                {
                    try
                    {
                        personaBL.AddPersonaConCargoIglesia(persona);
                        MessageBox.Show("Registro Correcto", "Registro",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("El Registro no se pudo completar Revise sus datos", "Mensaje",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                if (isNew == false)
                {
                    try
                    {
                        personaBL.UpdatePersonaConCargoIglesia(persona);
                        MessageBox.Show("Modificación Correcta", "Mensaje",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("La Edición no se pudo completar Revise sus datos", "Mensaje",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void btnObtenerPersona_Click_1(object sender, EventArgs e)
        {
            cargarPersona();
        }

        public void cargarPersona()
        {
            FrmPersona frm = new FrmPersona();
            frm.Extend();
            frm.currentUsuarioPersona = currentUsuarioMttoDatosTransferencia;
            frm.ShowDialog();
            if (frm.CurrentPersona != null)
            {
                var persona = pERSONABindingSource.Current as PERSONA;
                persona = frm.CurrentPersona;
                pERSONABindingSource.DataSource = persona;
                pERSONABindingSource.ResetBindings(true);
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            var cargoIglesia = cARGO_IGLESIABindingSource.Current as CARGO_IGLESIA;
            var currentPersona = pERSONABindingSource.Current as PERSONA;
            var current = dATOS_TRANSFERENCIABindingSource1.Current as DATOS_TRANSFERENCIA;
            

            if (cargoIglesia != null)
            {
                var detalle = new DATOS_TRANSFERENCIA
                {
                    PersonaId = currentPersona.Id,
                    CargoIglesiaId = cargoIglesia.Id,
                    CARGO_IGLESIA = cargoIglesia,
                    PERSONA = currentPersona
                };
                var existe = currentPersona.DATOS_TRANSFERENCIA.Where(dt => dt.CARGO_IGLESIA.Id.Equals(cargoIglesia.Id)).SingleOrDefault();

                if(existe == null)
                {
                    currentPersona.DATOS_TRANSFERENCIA.Add(detalle);
                }

                _listCargoIglesiaPorAsignar.Add(cargoIglesia);
                //pERSONABindingSource.ResetBindings(true);
                dATOS_TRANSFERENCIABindingSource1.ResetBindings(true);
            }
        }

        private void btnAgregarTodos_Click(object sender, EventArgs e)
        {
            var listaCargoIglesiaTodos = cARGO_IGLESIABindingSource.DataSource as List<CARGO_IGLESIA>;
            var currentPersona = pERSONABindingSource.Current as PERSONA;

            if (listaCargoIglesiaTodos != null)
            {
                foreach (var item in listaCargoIglesiaTodos)
                {
                    var detalle = new DATOS_TRANSFERENCIA
                    {
                        PersonaId = currentPersona.Id,
                        CargoIglesiaId = item.Id,
                        CARGO_IGLESIA = item,
                        PERSONA = currentPersona
                    };

                    var existe = currentPersona.DATOS_TRANSFERENCIA.Where(dt => dt.CARGO_IGLESIA.Id.Equals(item.Id)).SingleOrDefault();

                    if (existe == null)
                    {
                        currentPersona.DATOS_TRANSFERENCIA.Add(detalle);
                    }

                    _listCargoIglesiaPorAsignar.Add(item);
                    pERSONABindingSource.ResetBindings(true);
                    dATOS_TRANSFERENCIABindingSource1.ResetBindings(true);
                }
            }
        }

        private void btnQuitar_Click(object sender, EventArgs e)
        {
            var datosTransferencia = dATOS_TRANSFERENCIABindingSource1.Current as DATOS_TRANSFERENCIA;
            if (datosTransferencia != null)
            {
                if (datosTransferencia.Id > 0)
                {
                    datTransf.deleteDatosTransferencia(datosTransferencia.Id, datosTransferencia.CargoIglesiaId);
                }

                var cargoIglesia = _listCargoIglesiaPorAsignar.Where(d => d.Id.Equals(datosTransferencia.CargoIglesiaId)).FirstOrDefault();
                var datTransferencia = dATOS_TRANSFERENCIABindingSource1.DataSource as List<DATOS_TRANSFERENCIA>;
                var persona = pERSONABindingSource.Current as PERSONA;

                if (cargoIglesia != null || persona != null)
                {
                    dATOS_TRANSFERENCIABindingSource1.ResetBindings(true);

                    dATOS_TRANSFERENCIABindingSource1.RemoveCurrent();
                    _listCargoIglesiaPorAsignar.Remove(cargoIglesia);
                }
                else if (datTransferencia != null && datTransferencia.Count != 0)
                {
                    var cargoIglesiaQuitar = datTransferencia.Where(d => d.CargoIglesiaId.Equals(datosTransferencia.CargoIglesiaId)).FirstOrDefault();

                    dATOS_TRANSFERENCIABindingSource1.RemoveCurrent();
                    dATOS_TRANSFERENCIABindingSource1.ResetBindings(true);
                    datTransferencia.Remove(cargoIglesiaQuitar);
                }
                else
                {
                    MessageBox.Show("No hay datos seleccionados", "Mensaje", MessageBoxButtons.OK);
                }
            }
            else
            {
                MessageBox.Show("No hay datos seleccionados", "Mensaje", MessageBoxButtons.OK);
            }
            
        }

        public void cargaDatosEditar()
        {
 
        }

        private void BtnExtProfesion_Click(object sender, EventArgs e)
        {
            var _persona = pERSONABindingSource.Current as PERSONA;
            CARGO_IGLESIA currentcargo = cARGO_IGLESIABindingSource.Current as CARGO_IGLESIA;
            FrmCargoIglesia frm = new FrmCargoIglesia();
            frm.ShowDialog();
            currentcargo = frm.CurrentCargoIglesia;

            if (currentcargo != null)
            {
                var datotran = new DATOS_TRANSFERENCIA
                {
                    PersonaId = _persona.Id,
                    CargoIglesiaId = currentcargo.Id,
                    CARGO_IGLESIA = currentcargo
                };

                var existe = _persona.DATOS_TRANSFERENCIA.SingleOrDefault(p => p.CARGO_IGLESIA.Id.Equals(datotran.CargoIglesiaId));

                if (existe == null)
                {
                    dATOS_TRANSFERENCIABindingSource1.Add(datotran);
                    dATOS_TRANSFERENCIABindingSource1.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("El cargo ya se agregó"),
                                       @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void dATOS_TRANSFERENCIADataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _cargo = dATOS_TRANSFERENCIABindingSource1.Current as DATOS_TRANSFERENCIA;


            if (_cargo != null)
            {
                if (this.dATOS_TRANSFERENCIADataGridView.Columns[e.ColumnIndex].Name.Equals("BtnQuitarCargo"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar el cargo?"),
                        @"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_cargo.Id > 0)
                        {
                            datTransf.deleteDatosTransferencia(_cargo.Id, _cargo.CargoIglesiaId);
                        }
                        dATOS_TRANSFERENCIABindingSource1.RemoveCurrent();
                        dATOS_TRANSFERENCIABindingSource1.ResetBindings(true);
                    }
                }
            }
        }

    }
}
